/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package JPA;

import DAO.TrabajoDAO;
import domain.Entity.EntityTareaTrabajada;
import domain.Entity.EntityTrabajador;
import domain.Entity.EntityTarea;
import domain.Entity.EntityProyecto;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.persistence.EntityManager;
import javax.persistence.Query;
import javax.transaction.UserTransaction;

/**
 *
 * @author Administrador
 */
public class JPATrabajoDAO implements TrabajoDAO{
    
    public void trabajarTarea(EntityTareaTrabajada ett, EntityTrabajador etr, EntityTarea et, EntityProyecto ep) {
        try {
            Context ctx = new InitialContext();
            UserTransaction utx = (UserTransaction) ctx.lookup("java:comp/env/UserTransaction");


        try {
            utx.begin();
            EntityManager em = (EntityManager) ctx.lookup("java:comp/env/persistence/baronPU");
            EntityProyecto proyecto = em.find(domain.Entity.EntityProyecto.class, ep.getIdProyecto());
            EntityTarea tarea = em.find(domain.Entity.EntityTarea.class, et.getIdTarea());
            EntityTrabajador trabajador = em.find(domain.Entity.EntityTrabajador.class, etr.getDni());
            em.persist(ett);
            proyecto.setHoras(ep.getHoras());
            proyecto.setMinutos(ep.getMinutos());
            proyecto.setPorcentaje(ep.getPorcentaje());
            tarea.setHoras(et.getHoras());
            tarea.setMinutos(et.getMinutos());
            tarea.setPorcentaje(et.getPorcentaje());
            trabajador.setHoras(etr.getHoras());
            trabajador.setMinutos(etr.getMinutos());
            utx.commit();
        } catch (Exception ex) {
            try {
                utx.rollback();
            } catch (Exception exe) {
                System.out.println("Rollback failed: "+exe.getMessage());
                }
              }
             } catch (NamingException ex) {
            Logger.getLogger(JPAUsuarioDAO.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    public List obtenerTiempoTrabajadoTarea(EntityTrabajador etr, EntityTarea et) {
         List resultado = new ArrayList();
       try {
            
            Context ctx = new InitialContext();
            UserTransaction utx = (UserTransaction) ctx.lookup("java:comp/env/UserTransaction");
            EntityManager em = (EntityManager) ctx.lookup("java:comp/env/persistence/baronPU");
            Query q = em.createQuery("SELECT ett FROM EntityTareaTrabajada ett WHERE ett.etr = :etr AND ett.et = :et");
            q = q.setParameter("etr", etr);
            q = q.setParameter("et", et);
            resultado = q.getResultList();
             } catch (NamingException ex) {
            Logger.getLogger(JPAUsuarioDAO.class.getName()).log(Level.SEVERE, null, ex);
        }
        
        
    return resultado;
    }

    public List obetenerTareasTrabajadas(EntityTrabajador etr, Date fecha) {
         List resultado = new ArrayList();
       try {
            
            Context ctx = new InitialContext();
            UserTransaction utx = (UserTransaction) ctx.lookup("java:comp/env/UserTransaction");
            EntityManager em = (EntityManager) ctx.lookup("java:comp/env/persistence/baronPU");
            Query q = em.createQuery("SELECT ett FROM EntityTareaTrabajada ett WHERE ett.etr = :etr AND ett.fecha = :fecha");
            q = q.setParameter("etr", etr);
            q = q.setParameter("fecha", fecha);
            resultado = q.getResultList();
             } catch (NamingException ex) {
            Logger.getLogger(JPAUsuarioDAO.class.getName()).log(Level.SEVERE, null, ex);
        }
        
        
    return resultado;
    }

    public List trabajoRealizadoFechas(Date fechaIni,EntityTrabajador trabajador, Date fechaFin) {
         List resultado = new ArrayList();
       try {
            
            Context ctx = new InitialContext();
            EntityManager em = (EntityManager) ctx.lookup("java:comp/env/persistence/baronPU");
            Query q = em.createQuery("SELECT ett FROM EntityTareaTrabajada ett WHERE ett.etr = :trabajador AND ett.fecha >= :fechaIni AND ett.fecha <= :fechaFin ");
            q = q.setParameter("trabajador", trabajador);
            q = q.setParameter("fechaIni", fechaIni);
            q = q.setParameter("fechaFin", fechaFin);
            resultado = q.getResultList();
             } catch (NamingException ex) {
            Logger.getLogger(JPAUsuarioDAO.class.getName()).log(Level.SEVERE, null, ex);
        }
        
        
    return resultado;
    }

}
